// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gin/per_context_data.h"

#include "base/logging.h"
#include "gin/public/context_holder.h"
#include "gin/public/wrapper_info.h"

namespace gin {

PerContextData::PerContextData(ContextHolder* context_holder,
    v8::Local<v8::Context> context)
    : context_holder_(context_holder)
    , runner_(NULL)
{
    context->SetAlignedPointerInEmbedderData(
        kPerContextDataStartIndex + kEmbedderNativeGin, this);
}

PerContextData::~PerContextData()
{
    v8::HandleScope handle_scope(context_holder_->isolate());
    context_holder_->context()->SetAlignedPointerInEmbedderData(
        kPerContextDataStartIndex + kEmbedderNativeGin, NULL);
}

// static
PerContextData* PerContextData::From(v8::Local<v8::Context> context)
{
    return static_cast<PerContextData*>(
        context->GetAlignedPointerFromEmbedderData(kEncodedValueIndex));
}

} // namespace gin
